﻿using System.Net.Http;
using Newtonsoft.Json;

namespace DotNetStar.OpenSDK.QQ
{
    /// <summary>
    /// 获取 QQ 互联 通用信息的 api 模块基类，获取到 OpenId 和 AccessToken 后面的 api 模块继承此类。
    /// </summary>
    /// <typeparam name="TResponse">api 的响应结果类型。</typeparam>
    public abstract class QQApiRequest<TResponse> : ApiRequest<TResponse>
        where TResponse : QQInformationApiResponse
    {
        /// <summary>
        /// 初始化 <see cref="QQApiRequest{TResponse}"/> 类的新实例。
        /// </summary>
        /// <param name="requestUrl">请求的 url 地址。</param>
        /// <param name="config">访问 QQ API 列表的配置。</param>
        public QQApiRequest(string requestUrl,QQApiConfig config) : base(requestUrl)
        {
            this.OpenId = config.OpenId;
            this.AppId = config.AppId;
            this.AccessToken = config.AccessToken;
        }
        
        /// <summary>
        /// 获取已分配的 OpenId。
        /// </summary>
        public string OpenId { get;}

        /// <summary>
        /// 获取令牌的值。
        /// </summary>
        [ArgumentName("access_token")]
        public string AccessToken { get; }

        /// <summary>
        /// 获取应用 Id。
        /// </summary>
        [ArgumentName("oauth_consumer_key")]
        public string AppId { get; }

        /// <summary>
        /// 获取或设置返回值的格式：json/xml，默认是 json。
        /// </summary>
        public string Format { get; set; } = "json";        
    }
}
